package ccm.itesm.mx.servicios;


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class DetallesServicioActivity extends Activity {
	
	private ImageView imgv;
	private TextView tv1, tv2;
	private Button b;
	
	public String nomb = "";
	public String ubicacion = "";
	public String horario = "";
	public String urli = "";
	
	int da = 0;
	int ha = 0;
	
	static String dir = "http://acampusandroid.appspot.com/getdetalleserv?nombreServicio=";
	
	ProgressDialog progresa;
	
	Bundle ble2;
	
	Servicio dato;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.detalleserv);
		
		//Aqui obtengo el servicio seleccionado por el usuario
		Bundle ble = this.getIntent().getExtras();
		dato = (Servicio) ble.getSerializable("dato");
		
		//Mando a llamar al metodo que me regresa el JSON
		cargaDetalles(dato.getId());
		
		//Obtengo los componentes del layout
		tv1 = (TextView) findViewById(R.id.nomServ);
		tv2 = (TextView) findViewById(R.id.ubica);
		imgv = (ImageView) findViewById(R.id.pic);
		b = (Button) findViewById(R.id.bMenu);
		
		//Le pongo la informacion leida del JSON a los componentes del layout
		tv1.setText(nomb);
		tv2.setText(ubicacion + "\n\n" + horario);
		
		//Toast.makeText(getBaseContext(), dato.getId()+"", Toast.LENGTH_LONG).show();
		
		if(nomb.contains("Meson")){
			
		}
				
		//Aqui intento crear el imageview con la liga de la BD
		try{
			//String urli = "http://cmmobileapp.appspot.com/imgs/carmen.jpg";
			Drawable dw = ImageOperations(this, urli);
			imgv.setImageDrawable(dw);
		}
		catch(Exception e){
			e.printStackTrace();
		}
		
		//Aqui pongo la accion al boton
		b.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				
				ble2 = new Bundle();
				
				if(nomb.contains("Meson")){
					Calendar cal = Calendar.getInstance();
				
					SimpleDateFormat sdfDia = new SimpleDateFormat("yyyyMMdd");
					da = Integer.parseInt(sdfDia.format(cal.getTime()));
				
					SimpleDateFormat sdfHora = new SimpleDateFormat("kmm");
					ha = Integer.parseInt(sdfHora.format(cal.getTime()));
				
					Dia d = new Dia(da, ha);
					
					ble2.putSerializable("dia", d);
				}
				else{
					ble2.putInt("id", dato.getId());
				}
				
				progresa = ProgressDialog.show(DetallesServicioActivity.this, "Procesando.....", "Cargando....", true, false);
				cargaMenu();
			}
		});
		
	}
	
	public void cargaMenu(){
		
		Thread t = new Thread(){
			public void run(){
				unHandler.sendEmptyMessage(0);
			}
		};
		
		t.start();
		
	}
	
	private Handler unHandler = new Handler(){
		
		public void handleMessage(Message ms){
			
			if(!nomb.contains("Meson")){
				if(revisaMenu(dato.getId())){
					Toast.makeText(getApplicationContext(), "No existe menu para el servicio seleccionado",
							Toast.LENGTH_LONG).show();
				}
				else{
					Intent it = new Intent(DetallesServicioActivity.this, ListaMenuLocales.class);
					it.putExtras(ble2);
					startActivity(it);
				}
			}
			else{
				if(revisaMenu(da, ha)){
					Toast.makeText(getApplicationContext(), "No hay un Menu disponible para el dia actual",
							Toast.LENGTH_LONG).show();
				}
				else{
					Intent it = new Intent(DetallesServicioActivity.this, MesonActivity.class);
					it.putExtras(ble2);
					startActivity(it);
				}
			}
			
			progresa.dismiss();
		}
	};
	
	public Object fetch(String address) throws MalformedURLException, IOException {
        URL url = new URL(address);
        Object content = url.getContent();
        return content;
    }
	
    private Drawable ImageOperations(Context ctx, String url) {
        try {
            InputStream is = (InputStream) this.fetch(url);
            Drawable d = Drawable.createFromStream(is, "src");
            return d;
        } catch (MalformedURLException e) {
            return null;
        } catch (IOException e) {
            return null;
        }
    }
    
    private String download(String urlString){
        
		InputStream in = null;
        byte[] data = null;
        URLConnection conn = null;
        try{
        	URL url = new URL(urlString);
	    	conn = url.openConnection();
	        
	        if ((conn instanceof HttpURLConnection)){
	    		HttpURLConnection httpConn = (HttpURLConnection) conn;
	    		httpConn.setAllowUserInteraction(false);
	    		httpConn.setInstanceFollowRedirects(true);
	    		httpConn.setRequestMethod("GET");
	    		httpConn.connect();
	
	    		if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK){
	    			in = httpConn.getInputStream();
	    			ByteArrayOutputStream baos = new ByteArrayOutputStream();
	    			int c;
	    			while((c = in.read()) > -1)
	                    baos.write(c);
	                data = baos.toByteArray();
	                baos.close();
	                in.close();
	                String str = new String(data);
	                System.out.println(str);
	                return str;
	    		}
	    		else{                
	    			return("Error reading data");
	            }
	        }
    	}
    	catch (Exception ex){
    		return "Error in connection";
    	}
    	finally{
            try{
                if (conn != null){
                    conn = null;
                }
                if (in != null){
                    in.close();
                    in = null;
                }

            }
            catch(IOException ex){
            	return("Error: "+ex.getMessage());
            }
        }   
    	return null;
    }

    private void cargaDetalles(int serv){
		String consulta =  dir + serv;
		String respuesta = download(consulta);
		
		System.out.println(consulta);
		System.out.println(respuesta);
		
		if((respuesta != null) && !respuesta.startsWith("Error")){
			//respuesta = respuesta.substring(respuesta.indexOf('{'), respuesta.length()-1);
			try {
				JSONObject todo = new JSONObject(respuesta);
				nomb = todo.getString("name");
				ubicacion = todo.getString("ubicacion");
				horario = todo.getString("horario");
				urli = todo.getString("foto");
			}
			catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		else{
			Toast.makeText(getBaseContext(), "No hay datos", Toast.LENGTH_LONG).show();
		}
	}
    
    private boolean revisaMenu(int id){
    	
    	String dire = "http://acampusandroid.appspot.com/getmenulocal?nombreServicio=";
    	String consulta =  dire + id;
		String respuesta = download(consulta);
		
		System.out.println(respuesta);
				
		if((respuesta != null) && !respuesta.startsWith("Error")){
			try {
				JSONArray platillosArr = new JSONArray(respuesta);
				
				String platillo = platillosArr.getJSONObject(0).getString("error");
				
				System.out.println(platillo);
				
				if(platillo.contains("No")){
					return true;
				}
				else{
					return false;
				}
			}
			catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return false;
    }
    
    private boolean revisaMenu(int dia, int hora){
    	
    	String dir1 = "http://acampusandroid.appspot.com/getmenumeson?id_dia=";
    	String dir2 = "&hora=";
    	
    	String consulta =  dir1 + dia + dir2 + hora;
		String respuesta = download(consulta);
		
		if((respuesta != null) && !respuesta.startsWith("Error")){
			try {
				String temp = new JSONObject(respuesta).getString("error");
				
				if(temp.contains("No")){
					return true;
				}
				else{
					return false;
				}
				
			}
			catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return false;
    }
}
